﻿#ifndef MODBUSCONTROL_H
#define MODBUSCONTROL_H
/*
 *
 * PLC控制类
 *
*/
#include <QObject>
#include <QModbusRequest>
#include <QModbusReply>
#include <QModbusClient>
#include <QModbusDevice>
#include <QModbusDataUnit>
#include <QModbusRtuSerialMaster>       // RTU主站

#include <QSerialPort>

#include <QVariant>
#include <QTimer>
#include <QDebug>

#include <QtEndian>
#include <QtMath>


class ModBusControl : public QObject
{
    Q_OBJECT
public:
    ModBusControl(QObject *parent = nullptr);

    // 浮点数拆分      高位在前 低位在后
    void floatResolution(QString setValue, uint16_t *high, uint16_t *low);

    // 将两个16位数据整合为浮点数    高位在前 低位在后
    float combinationToFloat(quint16 valueH,quint16 valueL);
    int combinationToInt(quint16 valueH,quint16 valueL);


    // 写入线圈
    void write_modbus_rtu_Coils(QString address, QString newValue);

    // 写入保持寄存器 - 浮点数
    void write_modbus_rtu_Hold_F(QString address,QString newValue);

    // 写入保持寄存器 - 16位
    void write_modbus_rtu_Hold(QString address,QString newValue);

    // 读取 线圈
    void read_modbus_rtu_Coils();
    // 读取 寄存器
    void read_modbus_rtu_HoldingRegisters();
    // 读取 离散输入
    void read_modbus_rtu_DiscreteInputs();



    // 测试测试测试测试测试测试

    void read_M_172_Coils();

    void read_M_46_Coils();

    void read_D_156_Holdregisters();











    //------------------------------//

    // 读取 - 弹窗报警信息
    void read_PopUp_Warning_Message_state();

    // 读取 - 设备运行信息
    void read_Mechine_Running_Message_state();

    //------------------------------//

    // 读取 - 料高设定
    void read_LG_value();
    // 读取 - 当前位置
    void read_CurrentLocation_value();
    // 读取 - X轴当前位置
    void read_XAxisCurrentLocation_value();
    // 读取 - 当前段数
    void read_CurrentSectiones_value();
    // 读取 - 料长设定
    void read_LCSetting_value();
    // 读取 - 段数设定
    void read_SectionesSetting_value();
    // 读取 - 料高测量值
    void read_LGObserve_value();
    // 读取 - 左锯角度反馈
    void read_LeftSawAngle_Backvalue();
    // 读取 - 右锯角度反馈
    void read_RightSawAngle_Backvalue();
    // 读取 - 旋钮状态 ( 0: 联动 ， 1 : 左锯 ， 2: 右锯)
    void read_knobMode_value();
    // 读取 - 左锯片前位 状态
    void read_LeftSawQW_state();
    // 读取 - 左锯片后位 状态
    void read_LeftSawHW_state();
    // 读取 - 右锯片前位 状态
    void read_RightSawQW_state();
    // 读取 - 右锯片后位 状态
    void read_RightSawHW_state();
    // 读取 - 料高测量中
    void read_LG_Observe_State_();

    // 读取 - 压紧状态
    void read_ImpactState_state();

    //------------------------------//

    // 读取 - 把手位置
    void read_BS_Location_value();
    // 读取 - 把手位置补偿
    void read_BS_LocationCompensate_value();
    // 读取 - 把手宽度
    void read_BS_Width_value();

    //------------------------------//

    // 读取 - 超长料长
    void read_ExtraLong_LC_value();
    // 读取 - 机械坐标
    void read_MechineLocation_value();
    // 读取 - 超长补偿
    void read_ExtraLongCompensate_value();

    //------------------------------//

    // 读取 - 超短料长
    void read_ExtraShort_LC_value();
    // 读取 - 回拉距离
    void read_HL_Distance_value();
    // 读取 - 超短补偿
    void read_ExtraShortCompensate_value();
    // 读取 - 原点值
    void read_Origin_value();
    // 读取 - 内摆安全位置
    void read_NB_SafeLocation_value();    

    //------------------------------//

    // 读取 - 旋钮位置
    void read_Knob_Location_value();

    // 读取 - 已切数量 - 排料加工界面
    void read_Wokred_Count_PL_values();


    //------------------------------//

    // 读取 - 二维码料单 料长
    void reaed_M_Length_QR_values();
    // 读取 - 二维码料单 左右角度
    void read_Left_Right_Angle_QR_values();
    // 读取 - 二维码料单 数量
    void read_Count_QR_values();
    // 读取 - 二维码料单 已切数量
    void read_Worked_Count_QR_values();

    //------------------------------//

    // 读取 - 当前段数 - 角码加工页面
    void read_CurrentSectiones_JM_value();
    // 读取 - 累计段数 - 角码加工页面
    void read_WorkedSections_JM_value();
    // 读取 - 角码最短料长 - 角码加工页面
    void read_MinLongth_JM_value();
    // 读取 - 原料长度 - 角码加工页面
    void read_MaterialLongth_JM_value();
    // 读取 - 角码长度 - 角码加工页面
    void read_JMLongth_JM_value();
    // 读取 - 角码段数 - 角码加工页面
    void read_JMSectiones_JM_value();
    // 读取 - 刀补 - 角码加工页面
    void read_DB_JM_value();
    // 读取 - 角码料长错误 - 角码加工页面
    void read_JMLongthErr_JM_value();

    //------------------------------//

    // 读取 - 料高测量中  状态
    void read_LGObserveState_value();

    // 读取 - 定位速度
    void read_LocationSpeed_value();
    // 读取 - 手动速度
    void read_ManualSpeed_value();
    // 读取 - 压紧动作时间
    void read_ImpactTime_value();

    // 读取 - 左锯工进时间
    void read_LeftSaw_GJTime_value();
    // 读取 - 右锯工进时间
    void read_RightSaw_GJTime_value();
    // 读取 - 双锯45度补偿
    void read_DoubleSaws45_Compensate_value();
    // 读取 - 单独45度补偿
    void read_SingleSaw45_Compensate_value();
    // 读取 - 45度安全位置
    void read_45Safe_Distance_value();

    // 读取 - 左右吹气时间
    void read_LR_Blow_Time_value();
    // 读取 - 料高检测时间
    void read_LG_Detection_Time_value();
    // 读取 - 料高磁尺当量
    void read_LG_CC_DL_value();
    // 读取 - 电磁阀断电延时
    void read_DCF_OutageDelay_value();

    //------------------------------//

    // 读取 - 自动打印功能
    void read_AutoPrint_state();

    //------------------------------//

    void read_IO_Y0_Y25();

    // 读取 - X0 磁尺A相
    void read_IO_X0();
    // 读取 - X1 磁尺B相
    void read_IO_X1();
    // 读取 - X2 左机头旋转
    void read_IO_X2();
    // 读取 - X3 右机头旋转
    void read_IO_X3();
    // 读取 - X5 急停按钮
    void read_IO_X5();
    // 读取 - X6 压紧按钮
    void read_IO_X6();
    // 读取 - X7 工进按钮
    void read_IO_X7();
    // 读取 - X10 锯片启停
    void read_IO_X10();
    // 读取 - X11 原点复位
    void read_IO_X11();
    // 读取 - X16 伺服报警
    void read_IO_X16();
    // 读取 - X17 伺服准备好
    void read_IO_X17();
    // 读取 - X20 X轴原点
    void read_IO_X20();
    // 读取 - X21 X轴正限位
    void read_IO_X21();
    // 读取 - X22 X轴负限位
    void read_IO_X22();
    // 读取 - X23 前托退到位
    void read_IO_X23();
    // 读取 - X24 中托退到位
    void read_IO_X24();
    // 读取 - X25 后托退到位
    void read_IO_X25();

    //------------------------------//

    // 读取 - 每圈脉冲数   [伺服参数界面]
    void read_Per_Pulse_Count_value();
    // 读取 - 每圈位移量   [伺服参数界面]
    void read_Per_Move_Distance_value();
    // 读取 - 最大切割长度  [伺服参数界面]
    void read_Max_Cut_Longth_value();
    // 读取 - 反向软限位   [伺服参数界面]
    void read_R_Limit_value();
    // 读取 - 找零点高速   [伺服参数界面]
    void read_F_Zero_HSpeed_value();
    // 读取 - 找零点低速   [伺服参数界面]
    void read_F_Zero_LSpeed_value();
    // 读取 - 加减速时间   [伺服参数界面]
    void read_F_L_Speed_Time_value();
    // 读取 - 刹车打开时间  [伺服参数界面]
    void read_Brake_Open_Time_value();
    // 读取 - 刹车关闭延时  [伺服参数界面]
    void read_Brake_Close_Delay_value();
    // 读取 - 编码器数据  [伺服参数界面]
    void read_Encoder_Data_value();

    //------------------------------//

    // 读取 - 托料架检测状态
    void read_TLJ_State_value();
    // 读取 - 托料架安全距离
    void read_TLJ_Safe_Distance_value();
    // 读取 - 前托料退到位
    void read_Q_TLJ_Over_value();
    // 读取 - 中托料退到位
    void read_Z_TLJ_Over_value();
    // 读取 - 后托料退到位
    void read_H_TLJ_Over_value();
    // 读取 - 前托料架位置
    void read_Q_TLJ_Location_value();
    // 读取 - 中托料架上限
    void read_Z_TLJ_Up_Limit_value();
    // 读取 - 中托料架下限
    void read_Z_TLJ_Down_Limit_value();
    // 读取 - 后托料架位置
    void read_H_TLJ_Location_value();
    // 读取 - 前托料架使能
    void read_Q_TLJ_Enable_value();
    // 读取 - 前托料架大于0 小于1
    void read_Q_TLJ_LSState_value();
    // 读取 - 中托料架使能
    void read_Z_TLJ_Enable_value();
    // 读取 - 后托料架使能
    void read_H_TLJ_Enable_value();
    // 读取 - 后托料架大于0 小于1
    void read_H_TLJ_LS_State_value();

    //------------------------------//

    // 读取 - 位置补偿 1 - 20
    void read_Location_Compensate_values();

    // 读取 - 位置下限,上限,补偿 [摆角专补]
    void read_BJ_Location_Compensate_values();
    // 读取 - 启用开关 [摆角专补]
    void read_BJZB_Btn_value();

    //------------------------------//

    // 读取 - 位置下限，上限，补偿值 1 - 20
    void read_Location_Compensate_Any_values();
    // 读取 - 任意位置补偿开关 1 - 20
    void read_Compensate_Btn_Any_values();

    //------------------------------//

    // 读取 - 工进时间是否分开
    void read_GJTIME_Mode_State();
    // 读取 - 拉手功能有无
    void read_LS_Exist_value();
    // 读取 - 45度角专切
    void read_Angle45_Mode_value();
    // 读取 - 打印机有无
    void read_Printer_Exist_value();
    // 读取 - 伺服类型
    void read_Servo_Mode_value();
    // 读取 - 托料架有无
    void read_TLJ_Exist_value();
    // 读取 - 锯片选择模式
    void read_SawChoose_Mode_State();
    // 读取 - 自动测高功能有无
    void read_Auto_Observe_Exist_value();
    // 读取 - 限位开关
    void read_Limit_Btn_value();
    // 读取 - 旋钮功能
    void read_Knob_Program_value();
    // 读取 - 内摆1 外摆0
    void read_NB_WB_value();
    // 读取 - 机头旋钮常开
    void read_JT_Knob_Mode_value();
    // 读取 - 电磁阀断电模式
    void reaed_DCF_Power_Mode_value();
    // 读取 - 急停按钮模式
    void read_Scram_Mode_value();
    // 读取 - 编码器位数
    void read_Encoder_Mode_value();
    // 读取 - 伺服报警模式
    void read_Servo_Warning_Mode_value();
    // 读取 - 双锯延时启动
    void read_DoubleSaw_Open_value();
    // 读取 - 双锯延时时间
    void read_DoubleSaw_Delay_value();


    // 读取 - 报警信息
    void readWarningSignal();


    // 设置 ModBus连接属性
    void setConnectParameter(QString serialport,
                             QString baudrate,
                             QString databit,
                             QString paritybit,
                             QString stopbit);

    // ModBus 连接方法
    void connectMethod();

    // ModBus操作对象
    QModbusRtuSerialMaster* m_Modbus = new QModbusRtuSerialMaster(this);

    // ModBus 连接属性
    QString m_Serial;
    QString m_BaudRate;
    QString m_DataBit;
    QString m_PrityBit;
    QString m_StopBit;


    ///////////////////////////////////////////
    ///
    ///  PLC 读取 属性
    ///
    ///////////////////////////////////////////


    QString workValue;      // 代加工料长

    QString workCurrentOrder;   // 料单加工当前序号

    ///////////////// 加工界面 //////////////////
    QString LG_value;   // 料高设定值
    QString CurrentLocation;     // 当前位置
    QString XAxisCurrentLocation;  // X轴当前位置
    QString CurrentSectiones;       // 当前段数
    QString LC_value;       // 料长设定值
    QString sectionSetting;     // 段数设定值
    QString LGObserve;      // 料高设定值
    bool leftSawAngleBack;       // 左锯角度反馈
    bool rightSawAngleBack;      // 右锯角度反馈
    QString knobMode;           // 旋钮模式
    bool leftSawQW;      // 左锯片前位
    bool leftSawHW;      // 左锯片后位
    bool rightSawQW;     // 右锯片前位
    bool rightSawHW;     // 右锯片后位

    bool impactState;       // 压紧状态
    bool sawState;          // 锯片启动状态
    bool gjState;           // 工进状态

    bool lg_observe_state;      // 料高测量中

    ///////////////// 拉手定位 //////////////////
    QString LS_Locatoin;        // 拉手位置
    QString LS_LocationCompensate;      // 拉手位置补偿
    QString LS_Width;       // 拉手宽度

    ///////////////// 超长料长 //////////////////
    QString ExtraLong_LC;       // 超长料长
    QString MechineLocation;        // 机械坐标
    QString ExtraLongCompensate;     // 超长补偿

    ///////////////// 超短料长 //////////////////
    QString ExtraShort_LC;      // 超短料长
    QString HL_Distance;        // 回拉距离
    QString ExtraShortCompensate;   // 超短补偿
    QString OriginValue;        // 原点值
    QString NB_SafeLocation;    // 内摆安全位置

    ///////////////// 排料加工 //////////////////
    int Knob_Location;      // 旋钮位置

    QString workedCount01_PL;       // 已切数量01 - 排料加工
    QString workedCount02_PL;       // 已切数量02 - 排料加工
    QString workedCount03_PL;       // 已切数量03 - 排料加工
    QString workedCount04_PL;       // 已切数量04 - 排料加工
    QString workedCount05_PL;       // 已切数量05 - 排料加工
    QString workedCount06_PL;       // 已切数量06 - 排料加工
    QString workedCount07_PL;       // 已切数量07 - 排料加工
    QString workedCount08_PL;       // 已切数量08 - 排料加工
    QString workedCount09_PL;       // 已切数量09 - 排料加工
    QString workedCount10_PL;       // 已切数量10 - 排料加工
    QString workedCount11_PL;       // 已切数量11 - 排料加工
    QString workedCount12_PL;       // 已切数量12 - 排料加工
    QString workedCount13_PL;       // 已切数量13 - 排料加工
    QString workedCount14_PL;       // 已切数量14 - 排料加工
    QString workedCount15_PL;       // 已切数量15 - 排料加工
    QString workedCount16_PL;       // 已切数量16 - 排料加工
    QString workedCount17_PL;       // 已切数量17 - 排料加工
    QString workedCount18_PL;       // 已切数量18 - 排料加工
    QString workedCount19_PL;       // 已切数量19 - 排料加工
    QString workedCount20_PL;       // 已切数量20 - 排料加工    

    ///////////////// 二维码料单界面 /////////////

    QString m_Length01_QR;   // 材料料长01
    QString m_Length02_QR;   // 材料料长02
    QString m_Length03_QR;   // 材料料长03
    QString m_Length04_QR;   // 材料料长04
    QString m_Length05_QR;   // 材料料长05
    QString m_Length06_QR;   // 材料料长06
    QString m_Length07_QR;   // 材料料长07
    QString m_Length08_QR;   // 材料料长08
    QString m_Length09_QR;   // 材料料长09
    QString m_Length10_QR;   // 材料料长10
    QString m_Length11_QR;   // 材料料长11
    QString m_Length12_QR;   // 材料料长12
    QString m_Length13_QR;   // 材料料长13
    QString m_Length14_QR;   // 材料料长14
    QString m_Length15_QR;   // 材料料长15
    QString m_Length16_QR;   // 材料料长16
    QString m_Length17_QR;   // 材料料长17
    QString m_Length18_QR;   // 材料料长18
    QString m_Length19_QR;   // 材料料长19
    QString m_Length20_QR;   // 材料料长20

    QString LeftAngle01_QR;    //左角度01
    QString LeftAngle02_QR;    //左角度02
    QString LeftAngle03_QR;    //左角度03
    QString LeftAngle04_QR;    //左角度04
    QString LeftAngle05_QR;    //左角度05
    QString LeftAngle06_QR;    //左角度06
    QString LeftAngle07_QR;    //左角度07
    QString LeftAngle08_QR;    //左角度08
    QString LeftAngle09_QR;    //左角度09
    QString LeftAngle10_QR;    //左角度10
    QString LeftAngle11_QR;    //左角度11
    QString LeftAngle12_QR;    //左角度12
    QString LeftAngle13_QR;    //左角度13
    QString LeftAngle14_QR;    //左角度14
    QString LeftAngle15_QR;    //左角度15
    QString LeftAngle16_QR;    //左角度16
    QString LeftAngle17_QR;    //左角度17
    QString LeftAngle18_QR;    //左角度18
    QString LeftAngle19_QR;    //左角度19
    QString LeftAngle20_QR;    //左角度20

    QString RightAngle01_QR;   //右角度01
    QString RightAngle02_QR;   //右角度02
    QString RightAngle03_QR;   //右角度03
    QString RightAngle04_QR;   //右角度04
    QString RightAngle05_QR;   //右角度05
    QString RightAngle06_QR;   //右角度06
    QString RightAngle07_QR;   //右角度07
    QString RightAngle08_QR;   //右角度08
    QString RightAngle09_QR;   //右角度09
    QString RightAngle10_QR;   //右角度10
    QString RightAngle11_QR;   //右角度11
    QString RightAngle12_QR;   //右角度12
    QString RightAngle13_QR;   //右角度13
    QString RightAngle14_QR;   //右角度14
    QString RightAngle15_QR;   //右角度15
    QString RightAngle16_QR;   //右角度16
    QString RightAngle17_QR;   //右角度17
    QString RightAngle18_QR;   //右角度18
    QString RightAngle19_QR;   //右角度19
    QString RightAngle20_QR;   //右角度20

    QString Count01_QR;        //数量01
    QString Count02_QR;        //数量02
    QString Count03_QR;        //数量03
    QString Count04_QR;        //数量04
    QString Count05_QR;        //数量05
    QString Count06_QR;        //数量06
    QString Count07_QR;        //数量07
    QString Count08_QR;        //数量08
    QString Count09_QR;        //数量09
    QString Count10_QR;        //数量10
    QString Count11_QR;        //数量11
    QString Count12_QR;        //数量12
    QString Count13_QR;        //数量13
    QString Count14_QR;        //数量14
    QString Count15_QR;        //数量15
    QString Count16_QR;        //数量16
    QString Count17_QR;        //数量17
    QString Count18_QR;        //数量18
    QString Count19_QR;        //数量19
    QString Count20_QR;        //数量20

    QString Worked_Count01_QR;  //已切数量01
    QString Worked_Count02_QR;  //已切数量02
    QString Worked_Count03_QR;  //已切数量03
    QString Worked_Count04_QR;  //已切数量04
    QString Worked_Count05_QR;  //已切数量05
    QString Worked_Count06_QR;  //已切数量06
    QString Worked_Count07_QR;  //已切数量07
    QString Worked_Count08_QR;  //已切数量08
    QString Worked_Count09_QR;  //已切数量09
    QString Worked_Count10_QR;  //已切数量10
    QString Worked_Count11_QR;  //已切数量11
    QString Worked_Count12_QR;  //已切数量12
    QString Worked_Count13_QR;  //已切数量13
    QString Worked_Count14_QR;  //已切数量14
    QString Worked_Count15_QR;  //已切数量15
    QString Worked_Count16_QR;  //已切数量16
    QString Worked_Count17_QR;  //已切数量17
    QString Worked_Count18_QR;  //已切数量18
    QString Worked_Count19_QR;  //已切数量19
    QString Worked_Count20_QR;  //已切数量20


    ///////////////// 角码加工 //////////////////
    QString currentSectiones_JM;        // 当前段数
    QString workedSectiones_JM;         // 累计段数
    QString MiniLongth_JM;              // 角码最短料长
    QString MaterialLongth_JM;          // 角码原料长度
    QString JMLongth_JM;                // 角码长度
    QString JMSectiones_JM;             // 角码段数
    QString DB_JM;                      // 刀补
    bool JMLongthErr_JM;                // 角码长度错误

    ///////////////// 管理界面 //////////////////
    bool LGObserveState;                // 料高测量状态

    QString LocationSpeed;              // 定位速度
    QString ManualSpeed;                // 手动速度
    QString ImpactTime;                 // 压紧时间
    QString LeftSaw_GJTime;             // 左锯工进时间
    QString RightSaw_GJTime;            // 右锯工进时间
    QString DoubleSaws45_Compensate;    // 双锯45度补偿
    QString SingleSaw45_Compensate;     // 单锯45度补偿
    QString safeDistance;               // 45度安全距离
    QString LR_Blow_Time;               // 左右吹气时间
    QString LG_Detection_Time;          // 料高检测时间
    QString LG_CC_DL;                   // 料高磁尺当量
    QString DCF_OutageDelay;            // 电磁阀断电延时

    ///////////////// 打印界面 //////////////////
    bool AutoPrint;                     // 自动打印功能

    ///////////////// IO监控界面 //////////////////

    bool Y0;        // 脉冲
    bool Y1;        // 方向
    bool Y2;        // 左电机
    bool Y3;        // 右电机
    bool Y4;        // 左45度阀
    bool Y5;        // 左90度阀
    bool Y6;        // 右45度阀
    bool Y7;        // 右90度阀

    bool Y10;       // 左工进
    bool Y11;       // 右工进
    bool Y12;       // 左压紧
    bool Y13;       // 右压紧
    bool Y14;       // 料高气缸
    bool Y15;       // 前拖料架
    bool Y16;       // 中拖料架
    bool Y17;       // 后拖料架

    bool Y20;       // 刹车气缸
    bool Y21;       // 拽料气缸
    bool Y22;       // 左拉压紧
    bool Y23;       // 左侧拉料
    bool Y24;       // 吹气阀
    bool Y25;       // 左右吹气阀


    bool X0;        // 磁尺A相
    bool X1;        // 磁尺B相
    bool X2;        // 左机头旋转
    bool X3;        // 右机头旋转
    bool X5;        // 急停按钮
    bool X6;        // 压紧按钮
    bool X7;        // 工进按钮

    bool X10;       // 锯片启停
    bool X11;       // 原点复位
    bool X16;       // 伺服报警
    bool X17;       // 伺服准备好

    bool X20;       // X轴原点
    bool X21;       // X轴正限位
    bool X22;       // X轴负限位
    bool X23;       // 前托退到位
    bool X24;       // 中托退到位
    bool X25;       // 后托退到位

    ///////////////// 伺服参数界面 //////////////////

    QString Per_Pulse_Count;        //每圈脉冲数
    QString Per_Move_Distance;      //每圈位移量
    QString Max_Cut_Longth;         //最大切割长度
    QString R_Limit;                //反向软限位
    QString F_Zero_HSpeed;          //找零点高速
    QString F_Zero_LSpeed;          //找零点低速
    QString F_L_Speed_Time;         //加减速时间
    QString Brake_Open_Time;        //刹车打开时间
    QString Brake_Close_Delay;      //刹车关闭延时
    QString Encoder_Data;           //编码器数据

    ///////////////// 托料架设置界面 //////////////////

    bool TLJ_State;                  // 托料架检测状态
    QString QT_Safe_Location;        // 前托安全位置
    QString ZT_L_Safe_Location;      // 中托安全位置下限
    QString HT_Safe_Location;        // 后托安全位置
    QString ZT_U_Safe_Location;      // 重托安全位置上限
    QString TLJ_Safe_Distance;       // 托料架安全距离
    bool Q_TLJ_Over;                 // 前托料到位
    bool Z_TLJ_Over;                 // 中托料到位
    bool H_TLJ_Over;                 // 后托料到位
    QString Q_TLJ_Location;          // 前托料架位置
    QString Z_TLJ_Down_Limit;        // 中托料架下限
    QString Z_TLJ_Up_Limit;          // 中托料架上限
    QString H_TLJ_Location;          // 后托料架位置
    bool Q_TLJ_LS_State;             // 前托料架 0大于1小于
    bool Z_TLJ_LS_State;             // 中托料架 0大于1小于
    bool H_TLJ_LS_State;             // 后托料架 0大于1小于
    bool Q_TLJ_Enable;               // 前托料架使能    
    bool Z_TLJ_Enable;               // 中托料架使能
    bool H_TLJ_Enable;               // 后托料架使能


    ///////////////// 位置补偿界面 //////////////////

    QString Location_Compensate01;      // 位置补偿01
    QString Location_Compensate02;      // 位置补偿02
    QString Location_Compensate03;      // 位置补偿03
    QString Location_Compensate04;      // 位置补偿04
    QString Location_Compensate05;      // 位置补偿05
    QString Location_Compensate06;      // 位置补偿06
    QString Location_Compensate07;      // 位置补偿07
    QString Location_Compensate08;      // 位置补偿08
    QString Location_Compensate09;      // 位置补偿09
    QString Location_Compensate10;      // 位置补偿10
    QString Location_Compensate11;      // 位置补偿11
    QString Location_Compensate12;      // 位置补偿12
    QString Location_Compensate13;      // 位置补偿13
    QString Location_Compensate14;      // 位置补偿14
    QString Location_Compensate15;      // 位置补偿15
    QString Location_Compensate16;      // 位置补偿16
    QString Location_Compensate17;      // 位置补偿17
    QString Location_Compensate18;      // 位置补偿18
    QString Location_Compensate19;      // 位置补偿19
    QString Location_Compensate20;      // 位置补偿20
    QString Location_Compensate21;      // 位置补偿21
    QString Location_Compensate22;      // 位置补偿22
    QString Location_Compensate23;      // 位置补偿23
    QString Location_Compensate24;      // 位置补偿24

    QString Location_Compensate_BJ;     // 摆角专补 - 位置补偿
    QString Location_DownLimit_BJ;      // 摆角补偿 - 下限
    QString Location_UpLimit_BJ;        // 摆角专补 - 上限
    bool BJZB_Btn;                      // 摆角专补开关

    ///////////////// 任意位置补偿界面 //////////////////

    QString Location_DownLimit01_Any;        // 位置补偿下限01 - 任意位置补偿
    QString Location_DownLimit02_Any;        // 位置补偿下限02 - 任意位置补偿
    QString Location_DownLimit03_Any;        // 位置补偿下限03 - 任意位置补偿
    QString Location_DownLimit04_Any;        // 位置补偿下限04- 任意位置补偿
    QString Location_DownLimit05_Any;        // 位置补偿下限05 - 任意位置补偿
    QString Location_DownLimit06_Any;        // 位置补偿下限06 - 任意位置补偿
    QString Location_DownLimit07_Any;        // 位置补偿下限07 - 任意位置补偿
    QString Location_DownLimit08_Any;        // 位置补偿下限08 - 任意位置补偿
    QString Location_DownLimit09_Any;        // 位置补偿下限09 - 任意位置补偿
    QString Location_DownLimit10_Any;        // 位置补偿下限10 - 任意位置补偿
    QString Location_DownLimit11_Any;        // 位置补偿下限11 - 任意位置补偿
    QString Location_DownLimit12_Any;        // 位置补偿下限12 - 任意位置补偿
    QString Location_DownLimit13_Any;        // 位置补偿下限13 - 任意位置补偿
    QString Location_DownLimit14_Any;        // 位置补偿下限14 - 任意位置补偿
    QString Location_DownLimit15_Any;        // 位置补偿下限15 - 任意位置补偿
    QString Location_DownLimit16_Any;        // 位置补偿下限16 - 任意位置补偿
    QString Location_DownLimit17_Any;        // 位置补偿下限17 - 任意位置补偿
    QString Location_DownLimit18_Any;        // 位置补偿下限18 - 任意位置补偿
    QString Location_DownLimit19_Any;        // 位置补偿下限19 - 任意位置补偿
    QString Location_DownLimit20_Any;        // 位置补偿下限20 - 任意位置补偿

    QString Location_UpLimit01_Any;         // 位置补偿上限01 - 任意位置补偿
    QString Location_UpLimit02_Any;         // 位置补偿上限02 - 任意位置补偿
    QString Location_UpLimit03_Any;         // 位置补偿上限03 - 任意位置补偿
    QString Location_UpLimit04_Any;         // 位置补偿上限04 - 任意位置补偿
    QString Location_UpLimit05_Any;         // 位置补偿上限05 - 任意位置补偿
    QString Location_UpLimit06_Any;         // 位置补偿上限06 - 任意位置补偿
    QString Location_UpLimit07_Any;         // 位置补偿上限07 - 任意位置补偿
    QString Location_UpLimit08_Any;         // 位置补偿上限08 - 任意位置补偿
    QString Location_UpLimit09_Any;         // 位置补偿上限09 - 任意位置补偿
    QString Location_UpLimit10_Any;         // 位置补偿上限10 - 任意位置补偿
    QString Location_UpLimit11_Any;         // 位置补偿上限11 - 任意位置补偿
    QString Location_UpLimit12_Any;         // 位置补偿上限12 - 任意位置补偿
    QString Location_UpLimit13_Any;         // 位置补偿上限13 - 任意位置补偿
    QString Location_UpLimit14_Any;         // 位置补偿上限14 - 任意位置补偿
    QString Location_UpLimit15_Any;         // 位置补偿上限15 - 任意位置补偿
    QString Location_UpLimit16_Any;         // 位置补偿上限16 - 任意位置补偿
    QString Location_UpLimit17_Any;         // 位置补偿上限17 - 任意位置补偿
    QString Location_UpLimit18_Any;         // 位置补偿上限18 - 任意位置补偿
    QString Location_UpLimit19_Any;         // 位置补偿上限19 - 任意位置补偿
    QString Location_UpLimit20_Any;         // 位置补偿上限20 - 任意位置补偿

    QString Location_Compensate01_Any;      // 位置补偿01 - 任意位置补偿
    QString Location_Compensate02_Any;      // 位置补偿02 - 任意位置补偿
    QString Location_Compensate03_Any;      // 位置补偿03 - 任意位置补偿
    QString Location_Compensate04_Any;      // 位置补偿04 - 任意位置补偿
    QString Location_Compensate05_Any;      // 位置补偿05 - 任意位置补偿
    QString Location_Compensate06_Any;      // 位置补偿06 - 任意位置补偿
    QString Location_Compensate07_Any;      // 位置补偿07 - 任意位置补偿
    QString Location_Compensate08_Any;      // 位置补偿08 - 任意位置补偿
    QString Location_Compensate09_Any;      // 位置补偿09 - 任意位置补偿
    QString Location_Compensate10_Any;      // 位置补偿10 - 任意位置补偿
    QString Location_Compensate11_Any;      // 位置补偿11 - 任意位置补偿
    QString Location_Compensate12_Any;      // 位置补偿12 - 任意位置补偿
    QString Location_Compensate13_Any;      // 位置补偿13 - 任意位置补偿
    QString Location_Compensate14_Any;      // 位置补偿14 - 任意位置补偿
    QString Location_Compensate15_Any;      // 位置补偿15 - 任意位置补偿
    QString Location_Compensate16_Any;      // 位置补偿16 - 任意位置补偿
    QString Location_Compensate17_Any;      // 位置补偿17 - 任意位置补偿
    QString Location_Compensate18_Any;      // 位置补偿18 - 任意位置补偿
    QString Location_Compensate19_Any;      // 位置补偿19 - 任意位置补偿
    QString Location_Compensate20_Any;      // 位置补偿20 - 任意位置补偿

    bool CompensateBtn01_Any;               // 位置补偿开关01 - 任意位置补偿
    bool CompensateBtn02_Any;               // 位置补偿开关02 - 任意位置补偿
    bool CompensateBtn03_Any;               // 位置补偿开关03 - 任意位置补偿
    bool CompensateBtn04_Any;               // 位置补偿开关04 - 任意位置补偿
    bool CompensateBtn05_Any;               // 位置补偿开关05 - 任意位置补偿
    bool CompensateBtn06_Any;               // 位置补偿开关06 - 任意位置补偿
    bool CompensateBtn07_Any;               // 位置补偿开关07 - 任意位置补偿
    bool CompensateBtn08_Any;               // 位置补偿开关08 - 任意位置补偿
    bool CompensateBtn09_Any;               // 位置补偿开关09 - 任意位置补偿
    bool CompensateBtn10_Any;               // 位置补偿开关10 - 任意位置补偿
    bool CompensateBtn11_Any;               // 位置补偿开关11 - 任意位置补偿
    bool CompensateBtn12_Any;               // 位置补偿开关12 - 任意位置补偿
    bool CompensateBtn13_Any;               // 位置补偿开关13 - 任意位置补偿
    bool CompensateBtn14_Any;               // 位置补偿开关14 - 任意位置补偿
    bool CompensateBtn15_Any;               // 位置补偿开关15 - 任意位置补偿
    bool CompensateBtn16_Any;               // 位置补偿开关16 - 任意位置补偿
    bool CompensateBtn17_Any;               // 位置补偿开关17 - 任意位置补偿
    bool CompensateBtn18_Any;               // 位置补偿开关18 - 任意位置补偿
    bool CompensateBtn19_Any;               // 位置补偿开关19 - 任意位置补偿
    bool CompensateBtn20_Any;               // 位置补偿开关20 - 任意位置补偿

    ///////////////// 配置界面各项配置参数 //////////////////

    bool GJTIME_Mode;       // 工进时间分开
    bool LS_Exist;          // 拉手功能有无
    bool Angle45_Mode;      // 45度专切
    bool Printer_Exist;     // 打印机有无
    bool Servo_Mode;        // 伺服类型
    bool TLJ_Exist;         // 托料架有无
    bool SawChoose_Mode;    // 锯片选择模式
    bool AutoObserve_Exist; // 自动测高有无
    bool LimitBtn_Mode;     // 限位开关
    bool Knob_Program;      // 旋钮开关
    bool NBWB_Mode;         // 45度内摆外摆模式
    bool JT_Knob_Mode;      // 机头旋钮
    bool DCF_Power_Mode;    // 电磁阀断电
    bool Scram_Mode;        // 急停按钮模式
    bool Encoder_Mode;       // 编码器位数
    bool Servo_Warning_Mode;// 伺服报警模式
    bool DoubleSaw_Open;    // 双锯延时打开

    QString DoubleSaw_Delay; // 双锯延时时间

    ////////////////////
    //报警信息
    ////////////////////
    bool scramWarnSig;          // 急停有效信号
    bool servoWarnSig;          // 伺服报警信号
    bool F_LimitWarnSig;        // 正向限位超程
    bool R_LimitWarnSig;        // 反向限位超程

    ////////////////////
    //设备运行信息
    ////////////////////

    bool ExtraLong_Locating;        // 超长定位中
    bool Long_WorkState;            // 超长加工中
    bool Short_WorkState;           // 超短加工中
    bool JM_WorkState;              // 角码加工中
    bool MechineRunningState;       // 电机运行中
    bool FindZeroState;             // 设备找零中
    bool ZeroGoingState;            // 设备回零中

    ////////////////////
    //弹窗报警信息
    ////////////////////

    bool ZeroLocationFaled;     // 位置清零失败
    bool ServoReady;            // 伺服未准备好
    bool ReadLocationFailed;    // 读取位置失败
    bool ReadLocationOver;      // 读取位置完成
    bool ForbidRun_NotFindZero; // 未找零禁止运行提示
    bool ForbidLeftRun;         // 禁止左行提示
    bool ForbidRightRun;        // 禁止右行提示
    bool CurrentLocationEqualLocation;  // 当前位置等于定位位置提示
    bool NotChooseMechine;      // 未选择电机提示
    bool WorkingForbidImpact;   // 工作中禁止压紧提示


    bool JM_LC_Err;             // 角码料长错误提示
    bool SawErrForbidImpact;    // 锯片错误禁止压紧提示
    bool CurrentSectionesWorked;// 当前段数已加工完成
    bool SawNotRunForbidOut;    // 锯片未启动禁止出锯提示
    bool NotImpactForbidOut;    // 未压紧禁止出锯提示
    bool CurrentLocationForbidOut;  // 当前位置禁止出锯提示
    bool AutoPrintRun;          // 自动打印启动中继
    bool SetExtraShortLessCDLC;     // 设定超短小于超短料长提示
    bool SawInPlaceSignalErr;       // 锯片到位信号异常提示
    bool LocationZeroOver;      // 位置清零完成提示
    bool ForbidRightMechineMove;    // 禁止右机头移动提示
    bool ExtraLongLocation;         // 超长定位提示

    bool ChangeSawMethod;       // 切换锯方式提示
    bool ErrCorrected;          // 错误修正完成提示
    bool Forbid_45NB;           // 禁止45度内摆提示
    bool ExtraShortOrigin;      // 超短复位提示
    bool CleanBatteryWarning;   // 清除电池报警提示
    bool CleanBatteryDone;      // 清除电池报警完成
    bool Q_TL_Err;              // 前托料异常信号
    bool Z_TL_Err;              // 中托料异常信号
    bool H_TL_Err;              // 后托料异常信号



    // 测试测试测试测试测试
    bool m_172;
    bool m_46;
    QString d_156;


signals:
};

#endif // MODBUSCONTROL_H
